//
//  StatusListModel.swift
//  CBWWeiBo
//
//  Created by 陈博文 on 16/1/14.
//  Copyright © 2016年 陈博文. All rights reserved.
//

import UIKit
import SDWebImage


class StatusListModel: NSObject {

    /// 保存所有微博数据
    var statuses: [StatusViewModel]?
    
    /// 获取微博数据
    func loadData(finished: (models: [StatusViewModel]?, error: NSError?)->()){
        
        assert( UserAccount.loadUserAccount()?.access_token != nil, "必须有accessToken")
        
        let path = "2/statuses/home_timeline.json"
        let parameters = ["access_token": UserAccount.loadUserAccount()!.access_token!]
        
        NetworkTools.shareInstance.GET(path, parameters: parameters, success: { (task, objc) -> Void in
            // 1.安全检验
            guard let dict = objc as? [String: AnyObject] else
            {
                finished(models: nil, error: NSError(domain: "com.520it.lnj", code: 1001, userInfo: ["message": "服务器返回的数据是nil"]))
                return
            }
            // 2.取出statuses
            guard let array = dict["statuses"] as? [[String: AnyObject]] else
            {
                finished(models: nil, error: NSError(domain: "com.520it.lnj", code: 1002, userInfo: ["message": "字典中的statuses这个key对应的值是nil"]))
                return
            }
            // 3.字典转模型
            var models = [StatusViewModel]()
            for statusDict in array
            {
                let status = Status(dict: statusDict)
                let viewModel = StatusViewModel(status: status)
                models.append(viewModel)
            }
            
            // 4.保存微博数据
            self.statuses = models
            
            // 5.缓存所有微博配图
            self.cacheImages(models, finished: finished)
            
            }) { (task, error) -> Void in
                finished(models: nil, error: error)
        }
    }
    
    /// 缓存所有微博配图--
    private func cacheImages(list: [StatusViewModel], finished: (models: [StatusViewModel]?, error: NSError?)->()){
        // 0.创建一个组
        let group = dispatch_group_create()
        
        // 1.遍历取出每一个微博模型
        for viewModel in list
        {
            
            // 2.安全校验
            guard let picurls = viewModel.status.pic_urls else
            {
                continue
            }
            
            // 3.遍历当前微博模型中的所有配图
            for dict in picurls
            {
                // 4.取出当前配图的url字符串
                let url = NSURL(string: (dict["thumbnail_pic"] as? String) ?? "")
                
                // 添加当前操作到组中
                dispatch_group_enter(group)
                // 5.下载图片
                /*
                第1个参数: 需要下载的图片地址
                第2个参数: 下载附加选项
                第3个参数: 下载进度
                第4个参数: 下载完成之后的回调
                */
                SDWebImageManager.sharedManager().downloadImageWithURL(url, options: SDWebImageOptions(rawValue: 0), progress: nil, completed: { (_, _, _, _, _) -> Void in
//                    CBWLog("图片下载完成")
                    
                    // 从组中移除一个操作
                    dispatch_group_leave(group)
                })
            }
            
        }
        
        /// 当所有添加到组中的操作都被移除之后就会调用
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            //            self.tableView.reloadData()
            CBWLog("下载完成一个 20个cell 里面的图片")
            finished(models: list, error: nil)
        }
    }

    
    
    
}
